package fr.upmc.alasca.centreCalcul.interne.controleurAdmission.interfaces;

import fr.upmc.alasca.centreCalcul.objets.DemandeAdmission;
import fr.upmc.components.interfaces.OfferedI;
import fr.upmc.components.interfaces.RequiredI;


/**
 * Interface proposée par le <code>ControleurAdmission</code> pour le
 * <code>GenerateurDemandes</code>.
 * @author Antoine Lavaire, Sabri Labassi, Thibaut Fleury, Ryme Fantazi
 */
public	interface	ControleurAdmissionClientI
extends 			OfferedI, RequiredI
{
	/**
	 * Permet de soumettre une demande d'exécution d'application.
	 * Si les ressources nécessaires à l'exécution de l'application sont
	 * disponibles, on localise une ou plusieurs machines physiques, instancie 
	 * l'exécution de l'application (création de la machine virtuelle et du
	 * répartiteur de requêtes) et donne un identifiant unique à cette application.
	 * Sinon, on refuse la demande.
	 * @param p_demandeAdmission La demande d'admission d'une application.
	 * @return L'URI du <code>RepartiteurRequetes<c/ode> (qui sert aussi
	 * d'identifiant de l'application) si la demande a été acceptée, null sinon.
	 * @throws Exception
	 */
	public	String	soumettreApplication
	(
		DemandeAdmission	p_demandeAdmission
	) throws	Exception;


	/**
	 * Permet d'arrêter une application.
	 * @parma p_uriApplication L'identifiant de l'application à arrêter.
	 * @throws Exception
	 */
	public	void	arreterApplication
	(
		String	p_uriApplication
	) throws	Exception;
}
